﻿/// <reference path="../jquery-1.6.2-vsdoc.js" />

/***** Block UI options *****/
// override these in your code to change the default behavior and style 
$.blockUI.defaults = {
    // message displayed when blocking (use null for no message) 
    message: 'Processing...',

    // styles for the message when blocking; if you wish to disable 
    // these and use an external stylesheet then do this in your code: 
    // $.blockUI.defaults.css = {}; 
    css: {
        padding: 0,
        margin: 0,
        width: '30%',
        top: '40%',
        left: '35%',
        textAlign: 'center',
        color: '#000',
        border: '1px solid #FFF',
        backgroundColor: '#fff',
        cursor: 'wait'
    },

    // styles for the overlay 
    overlayCSS: {
        backgroundColor: '#000',
        opacity: 0.6
    },

    // styles applied when using $.growlUI 
    growlCSS: {
        width: '350px',
        top: '10px',
        left: '',
        right: '10px',
        border: 'none',
        padding: '5px',
        opacity: 0.6,
        cursor: null,
        color: '#fff',
        backgroundColor: '#000',
        '-webkit-border-radius': '10px',
        '-moz-border-radius': '10px'
    },

    // IE issues: 'about:blank' fails on HTTPS and javascript:false is s-l-o-w 
    // (hat tip to Jorge H. N. de Vasconcelos) 
    iframeSrc: /^https/i.test(window.location.href || '') ? 'javascript:false' : 'about:blank',

    // force usage of iframe in non-IE browsers (handy for blocking applets) 
    forceIframe: false,

    // z-index for the blocking overlay 
    baseZ: 1000,

    // set these to true to have the message automatically centered 
    centerX: true, // <-- only effects element blocking (page block controlled via css above) 
    centerY: true,

    // allow body element to be stetched in ie6; this makes blocking look better 
    // on "short" pages.  disable if you wish to prevent changes to the body height 
    allowBodyStretch: true,

    // enable if you want key and mouse events to be disabled for content that is blocked 
    bindEvents: true,

    // be default blockUI will supress tab navigation from leaving blocking content 
    // (if bindEvents is true) 
    constrainTabKey: true,

    // fadeIn time in millis; set to 0 to disable fadeIn on block 
    fadeIn: 200,

    // fadeOut time in millis; set to 0 to disable fadeOut on unblock 
    fadeOut: 400,

    // time in millis to wait before auto-unblocking; set to 0 to disable auto-unblock 
    timeout: 0,

    // disable if you don't want to show the overlay 
    showOverlay: true,

    // if true, focus will be placed in the first available input field when 
    // page blocking 
    focusInput: true,

    // suppresses the use of overlay styles on FF/Linux (due to performance issues with opacity) 
    applyPlatformOpacityRules: true,

    // callback method invoked when unblocking has completed; the callback is 
    // passed the element that has been unblocked (which is the window object for page 
    // blocks) and the options that were passed to the unblock call: 
    //     onUnblock(element, options) 
    onUnblock: null,

    // don't ask; if you really must know: http://groups.google.com/group/jquery-en/browse_thread/thread/36640a8730503595/2f6a79a77a78e493#2f6a79a77a78e493 
    quirksmodeOffsetHack: 4
};

//CKEditor settings
var CKEFull = {
    toolbar:
    [
        { name: 'xtra', items: ['Smiley'] },
        { name: 'clipboard', items: ['Cut', 'Copy', 'Paste', '-', 'Undo', 'Redo'] },
        { name: 'font', items: ['FontSize', 'TextColor', 'BGColor'] },
        { name: 'fontstyle', items: ['Bold', 'Italic', 'Underline', 'Strike'] },
        { name: 'layout', items: ['NumberedList', 'BulletedList', '-', 'Outdent', 'Indent'] },
        { name: 'paragraph', items: ['JustifyLeft', 'JustifyCenter', 'JustifyRight', 'JustifyBlock'] },
        { name: 'link', items: ['Link', 'Unlink', '-', 'Image'] },
    ],
    skin: 'kama'
};

var CKEMini = {
    toolbar:
    [
        { name: 'xtra', items: ['Smiley'] },
        { name: 'clipboard', items: ['Cut', 'Copy', 'Paste', '-', 'Undo', 'Redo'] },
        { name: 'fontstyle', items: ['Bold', 'Italic', 'Underline', 'Strike'] },
        { name: 'link', items: ['Link', 'Unlink'] },
    ],
    skin: 'kama',
    height: '200px'
};

var selectedMenu = 'selectedMenu';
var canHideSubMenu = false;

/// Init
$(function () {
    //Build menu
    initMenu();

    //Animate up all controls
    initControl();
});

/*************************************** MENU ***************************************/
function initMenu() {
    // Check highlight current menu
    highlightSelectedMenu();
    // Make the menu "lively"
    animateMenu();
}

// Build the top navigation menu animation
function animateMenu() {
    //Hide sub menu at start
    $('#dnd-submenu').slideUp();

    $('.mainMenu li a').hover(
    function () {
        //Animate menu item
        $(this).stop(true, true).animate({
            backgroundColor: '#fff',
            color: 'black'
        }, 200);

        //Show sub menu
        var cssObj = {
            'top': $(this).offset().top + 35,
            'left': $(this).offset().left
        }

        //Slide the sub menu in
        var subMenuHtml = $(this).parent().find('ul').html();
        if (subMenuHtml !== null) {
            canHideSubMenu = false;
            $('#dnd-submenu').css(cssObj).html('<ul>' + subMenuHtml + '</ul>').stop(true, true).slideDown();
        }

        hanldeSubMenu();
    },
    function () {
        //Mouse out animation
        if (!$(this).hasClass(selectedMenu)) {
            $(this).stop(true, true).animate({
                backgroundColor: '#9BD715',
                color: 'white'
            }, 500);
        }

        //Ready to hide the sub menu
        canHideSubMenu = true;
        $.doTimeout(200, hideSubMenu);
    });
}

//Highlight current selected menu
function highlightSelectedMenu() {
    //Get current page location
    var urlParts = window.location.toString().split('/');
    //Not at root node, then get the page name
    var pageUrl = urlParts[urlParts.length - 1];

    var path = window.location.pathname;

    //Loop and highlight matched node, ignore root node
    var foundNode = false;
    $('.mainMenu li a').each(function () {
        if (path.length > 1 && path.indexOf($(this).attr('href')) !== -1) {
            $(this).css('background', '#fff').css('color', '#000').addClass(selectedMenu);
            foundNode = true;
        }
    });

    //At root page then highlight root node
    if (!foundNode)
        $('a', $('.mainMenu li').last()).css('background', '#fff').css('color', '#000').addClass(selectedMenu);
    else {
        $('a', $('.mainMenu li').last()).css('background', '#9BD715').css('color', '#fff').removeClass(selectedMenu);
    }
}

// Hiding sub menu on idle
function hideSubMenu() {
    if (canHideSubMenu) {
        $('#dnd-submenu').stop(true, true).slideUp();
    }
}

//Handle sub menu hiding/staying
function hanldeSubMenu() {
    $('#dnd-submenu ul').hover(
    function () {

        canHideSubMenu = false;
    },
    function () {

        canHideSubMenu = true;
        $.doTimeout(200, hideSubMenu);
    });

    $('#dnd-submenu li a').hover(
    function () {
        //Animate menu item
        $(this).stop(true, true).animate({
            backgroundColor: '#fff',
            color: 'black'
        }, 200);
    },
    function () {
        if (!$(this).hasClass(selectedMenu)) {
            $(this).stop(true, true).animate({
                backgroundColor: '#9BD715',
                color: 'white'
            }, 200);
        }
    });
}

/*************************************** CONTROL ***************************************/

function initControl() {
    //Button animation
    initButton();
}

function initButton() {
    $('.dndAnchorButton a, .dndSubmitButton').hover(
    function () {
        //Animate
        $(this).stop(true, true).animate({
            backgroundColor: '#fff',
            color: 'black'
        }, 200);
    },
    function () {
        //Mouse out animation
        $(this).stop(true, true).animate({
            backgroundColor: '#9BD715',
            color: 'white'
        }, 200);
    })
}

/*************************************** HELPER ************************************/

//Process require validation
function ValidateRequired(jInput) {
    //When something is entered then remove red indication
    jInput.keypress(function () {
        var width = jInput.css('width');
        jInput.removeClass().removeAttr('style').addClass('dndFormInput').css('width', width);
    });
    //Empty value, show red indication
    if ($.trim(jInput.val()) == '') {
        jInput.css('border', '1px solid red').css('background', '#FFEEEE');
        return false;
    }
    else return true;
}

//Determine if the instance of CKEditor is empty or not
function IsEditorEmpty(jEditor) {
    return ($.trim(jEditor.ckeditorGet().getData()) == '');
}